import numpy as np

def myadd(x, y):
  return x+y

myadd = np.frompyfunc(myadd, 2, 1) #input number 2,return number 1,实际上走向归约的操作。
print(myadd([1, 2, 3, 4], [5, 6, 7, 8]))
print(np.add([1, 2, 3, 4], [5, 6, 7, 8]))
print(np.add.reduce( np.arange(1, 9)))
print(type(myadd),type(np.add), type(np.add.reduce)) #<class 'numpy.ufunc'> <class 'numpy.ufunc'> <class 'builtin_function_or_method'>
'''
np.frompyfunc 是 NumPy 中的一个函数，它可以将任意的 Python 函数转换为一个 NumPy 的通用函数（ufunc）。这个 ufunc 可以对 NumPy 数组中的元素进行逐一操作。np.frompyfunc 接受三个参数：
第一个参数是需要转换的 Python 函数。
第二个参数是整数，表示输入参数的数量，即 Python 函数接受的参数个数。
第三个参数也是整数，表示函数的返回值的数量。
'''
#vectorize的方式
def circle_area(radius):
    return np.pi * radius ** 2

# Create a vectorized version of the function
circle_ufunc = np.vectorize(circle_area)
# Test the ufunc with a single value
radius_values = np.array([1, 2, 3, 4])
areas = circle_ufunc(radius_values)
print(areas)
print(type(circle_area),type(circle_ufunc) )# <class 'function'> <class 'numpy.vectorize'>

#性能测试
